/**
 * cookie 转化 json 格式
 * 如果有传入的cookie name转化传入的cookie 
 * @param {string} cookie_name 需要转化成json的cookie的字符串
 */
function cookie2json (oCookies) {
  var oCookiesObj = {};

  if (oCookies) {
    var oCookiesArr = oCookies.split(';');

    oCookiesArr.forEach(item => {
      var arr = item.split('=');
      oCookiesObj[arr[0]] = arr[1];
    });
    return oCookiesObj;
  }
  return "请传入 cookie 给这个函数";
}

/**
 * 1. [正则站长工具](http://tool.chinaz.com/regex/)
 * 2. [实用正则表达式匹配和替换](https://www.cnblogs.com/DreamRecorder/p/8966642.html)
 * 3. [slice 数组教程](https://www.cnblogs.com/pengzp97/p/10297594.html)
 * 获取 cookie path 属性值的 方法
 * @param {string} str url path 部分 默认可以传递 window.location.pathname
 */
function getPath (str) {
  var path = '';
  /**如果地址栏包含 . 代表这个地址后缀是文件 需要删除这个文件名  */
  var boolean = str.indexOf('.') !== -1;
  if (boolean) {
    path = str.split('/').slice(0, -1).join('/');
  } else {
    path = str;
  }
  return path;
}

/**
 * 根据 cookie 名字获取 cookie
 * @param {string} name cookie名字
 * @return {Array<string>|any[]} 找到就返回 cookie 没有就返回 空字符串
 */
function getCookie (name) {
  var oCookies = document.cookie;
  if (name) {
    return oCookies.split(';').filter(item => item.indexOf(name) !== -1);
  }
  return [];
}

/**
 * 删除 cookie 
 * @param {string} name   需要删除的 cookie 的名字
 * @param {string} domain 需要删除的 cookie 的所在域名 默认当前浏览器域名，可以传递空字符串占位
 * @param {string} path   需要删除的 cookie 的路径 默认当前浏览器根据经，需要删除其他路径请自行传入
 * @description 用例：
 * 
 * ```js
 * delCookie('YWJ1',document.domain,'/')
 * ```
 * 
 */
function delCookie (name, domain, path) {

  path = path || '/';
  domain = domain || document.domain;
  var exp = new Date();

  exp.setTime(exp.getTime() - 1);


  document.cookie =
    name + "=" + " " + ";" +
    "path" + "=" + path + ";" +
    "domain" + "=" + domain + ";" +
    "expires=" + exp.toGMTString();
}

/**
 * 定义创建一个cookie的函数
 * 在客户端自己创建一个cookie 
 * cookie 分成: 名字, 值, 过期时间, 三部分
 * 
 * @param {string} c_name cookie 名字
 * @param {string} value cookie 值
 * @param {number} enpiredays cookie 过期时间
 * 
 * 1.实际上是c_name=value 但是为了防止值存在URL里不允许出现的字符，所以用escape（）方法，
 *   即将String进行编码
 * 2.第二行是三目运算（条件）？真值：假值 后面的；是与前面做拼接
 * 3.toGMTString（）转化为格林尼治的世界格式
 * ```js
 * setCookie('YWJ4', '24', 1, '')
 * ```
 */
function setCookie (c_name, value, enpiredays, domain) {
  // https://blog.csdn.net/qq_35574888/article/details/80959449
  // Set－Cookie: NAME=VALUE;Expires=DATE;Path=PATH;Domain=DOMAIN_NAME;SECURE

  var exdate = new Date();
  exdate.setDate(exdate.getDate() + enpiredays); //将到期天数转化为到期日期
  /* 不设置过期时间 name你设置了cookie 过一会儿就消失了 那还不如不设置 */

  const NAME = c_name;
  const VALUE = escape(value);;
  const Expires = (enpiredays == null) ? "" : ";expires=";
  const DATE = exdate.toGMTString();
  const DOMAIN_NAME = domain || document.domain;;


  // document.cookie = c_name + "=" + value + expires + '=' + exdate.toGMTString();
  document.cookie = `${NAME}=${VALUE};${Expires}=${DATE};Domain=${DOMAIN_NAME};`;

  console.log('setCookie', document.cookie);
}

